home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Talk2Boopsi;
-
- { This example creates a Boopsi prop gadget and integer string gadget, connecting them so they }
- { update each other when the user changes their value. The example program only initializes }
- { the gadgets and puts them on the window; it doesn't have to interact with them to make them }
- { talk to each other. }
-
- uses Exec, Intuition, Utility;
-
- {$I tagutils.inc}
-
- VAR
- w : pWindow;
- mymsg : pIntuiMessage;
- prop,
- int : pGadget;
- done : BOOLEAN;
- dummy : Word;
- temp : Longint;
- thetags : array[0..11] of tTagItem;
- prop2intmap : array[0..1] of tTagItem;
- int2propmap : array[0..1] of tTagItem;
-
- CONST
-
- vers : PChar = '$VER: Talk2boopsi 37.1';
-
- PROPGADGET_ID = 1;
- INTGADGET_ID = 2;
- PROPGADGETWIDTH = 10;
- PROPGADGETHEIGHT = 80;
- INTGADGETHEIGHT = 18;
- VISIBLE = 10;
- TOTAL = 100;
- INITIALVAL = 25;
- MINWINDOWWIDTH = 80;
- MINWINDOWHEIGHT = (PROPGADGETHEIGHT + 70);
- MAXCHARS = 3;
-
- PROCEDURE CleanUp(Why : STRING; err: Word);
- BEGIN
- IF prop <> NIL THEN DisposeObject(prop);
- IF int <> NIL THEN DisposeObject(int);
- IF w <> NIL THEN CloseWindow(w);
- IF Why <> '' THEN WriteLN(Why);
- Halt(err);
- END;
-
- BEGIN
-
- done := FALSE;
-
- prop2intmap[0] := TagItem(PGA_Top, STRINGA_LongVal);
- prop2intmap[1].ti_Tag := TAG_END;
-
- int2propmap[0] := TagItem(STRINGA_LongVal, PGA_Top);
- int2propmap[1].ti_Tag := TAG_END;
-
- thetags[0] := TagItem(WA_Flags, WFLG_DEPTHGADGET + WFLG_DRAGBAR +
- WFLG_CLOSEGADGET + WFLG_SIZEGADGET + WFLG_ACTIVATE);
- thetags[1] := TagItem(WA_IDCMP, IDCMP_CLOSEWINDOW);
- thetags[2] := TagItem(WA_Width, MINWINDOWWIDTH + 10);
- thetags[3] := TagItem(WA_Height, MINWINDOWHEIGHT + 10);
- thetags[4] := TagItem(WA_MinWidth, MINWINDOWWIDTH);
- thetags[5] := TagItem(WA_MinHeight, MINWINDOWHEIGHT);
- thetags[6].ti_Tag := TAG_END;
-
- w := OpenWindowTagList(NIL,@thetags);
-
- IF w=NIL THEN CleanUp('No window',20);
-
- thetags[0] := TagItem(GA_ID, PROPGADGET_ID);
- thetags[1] := TagItem(GA_Top, (w^.BorderTop) + 5);
- thetags[2] := TagItem(GA_Left, (w^.BorderLeft) + 5);
- thetags[3] := TagItem(GA_Width, PROPGADGETWIDTH);
- thetags[4] := TagItem(GA_Height, PROPGADGETHEIGHT);
- thetags[5] := TagItem(ICA_MAP, Longint(@prop2intmap));
- thetags[6] := TagItem(PGA_Total, TOTAL);
- thetags[7] := TagItem(PGA_Top, INITIALVAL);
- thetags[8] := TagItem(PGA_Visible, VISIBLE);
- thetags[9] := TagItem(PGA_NewLook, 1); { true }
- thetags[10].ti_Tag := TAG_END;
-
- prop := NewObjectA(NIL, PChar('propgclass'#0),@thetags);
-
- IF prop = NIL THEN CleanUp('No propgadget',20);
-
-
- thetags[0] := TagItem(GA_ID, INTGADGET_ID);
- thetags[2] := TagItem(GA_Top, (w^.BorderTop) + 5);
- thetags[3] := TagItem(GA_Left, (w^.BorderLeft) + PROPGADGETWIDTH + 10);
- thetags[4] := TagItem(GA_Width, MINWINDOWWIDTH -
- (w^.BorderLeft + w^.BorderRight +
- PROPGADGETWIDTH + 15));
- thetags[5] := TagItem(GA_Height, INTGADGETHEIGHT);
-
- thetags[6] := TagItem(ICA_MAP, Longint(@int2propmap));
- thetags[7] := TagItem(ICA_TARGET, Longint(prop));
- thetags[8] := TagItem(GA_Previous, Longint(prop));
-
- thetags[9] := TagItem(STRINGA_LongVal, INITIALVAL);
- thetags[10] := TagItem(STRINGA_MaxChars, MAXCHARS);
- thetags[11].ti_Tag := TAG_END;
-
- int := NewObjectA(NIL, PChar('strgclass'#0),@thetags);
-
- thetags[0] := TagItem(ICA_TARGET, Longint(int));
- thetags[1].ti_Tag := TAG_END;
-
- temp := SetGadgetAttrsA(prop, w, NIL,@thetags);
-
- IF int = NIL THEN CleanUp('No INTEGER gadget',20);
-
- dummy := AddGList(w, prop, -1, -1, NIL);
- RefreshGList(prop, w, NIL, -1);
-
- WHILE (NOT done) DO BEGIN
- mymsg := pIntuiMessage(WaitPort(W^.UserPort));
- mymsg := pIntuiMessage(GetMsg(W^.UserPort));
- IF mymsg^.IClass = IDCMP_CLOSEWINDOW THEN done := True;
- ReplyMsg(pMessage(mymsg));
- END;
-
- dummy := RemoveGList(w, prop, -1);
- CleanUp('',0);
- END.
-
-
-
-
-
-